home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
201
/
201.xpi
/
modules
/
mediator.jsm
< prev
next >
Wrap
Text File
|
2010-01-11
|
4KB
|
153 lines
/* You may find the license in the LICENSE file */
const EXPORTED_SYMBOLS = [
'getMostRecent',
'getMostRecentByUrl',
'getAllByType',
'openExternal',
'openUrl',
'showNotice',
];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;
const Cu = Components.utils;
const Exception = Components.Exception;
const mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
const ioservice = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService);
const protoservice = Cc['@mozilla.org/uriloader/external-protocol-service;1'].getService(Ci.nsIExternalProtocolService);
const logger = Cc['@downthemall.net/debug-service;1'].getService(Ci.dtaIDebugService);
const windowwatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
function objToString(obj) {
if (obj == null || obj == undefined) {
return obj;
}
if (
typeof obj == 'string'
|| obj instanceof String
) {
return obj.toString();
}
if (
obj instanceof Ci.nsIURL
|| obj instanceof Ci.nsIURI
) {
return obj.spec;
}
if (obj.url) {
return objToString(obj.url);
}
throw new Exception("Not a valid type");
}
function objToUri(obj) {
if (obj == null || obj == undefined) {
return null;
}
if (obj instanceof Ci.nsIURL || obj instanceof Ci.nsIURI) {
return obj;
}
if (typeof obj == 'string' || obj instanceof String) {
return ioservice.newURI(obj.toString(), null, null);
}
if (obj.url) {
return objToUri(obj.url);
}
throw new Exception("Not a valid type");
}
/**
* Gets the most recent window
* @param type Either a string or an array of string specifying the type of the window
*/
function getMostRecent(type) {
if (type instanceof Array) {
for each (t in type) {
let rv = getMostRecent(t);
if (rv) {
return rv;
}
}
}
return mediator.getMostRecentWindow(type.toString());
}
/**
* Gets the most recent window by url instead of type
*/
function getMostRecentByUrl(url) {
if (!url) {
return null;
}
url = objToString(url);
let enumerator = mediator.getEnumerator(null);
while (enumerator.hasMoreElements()) {
var win = enumerator.getNext();
if (win.location == url) {
return win;
}
}
return null;
}
function getAllByType(type) {
let rv = [];
let enumerator = mediator.getEnumerator(type);
while (enumerator.hasMoreElements()) {
rv.push(enumerator.getNext());
}
return rv;
}
function openExternal(link) {
logger.logString("Mediator: Using external handler for " + link);
protoservice.loadUrl(objToUri(link));
}
function openUrl(window, link, ref) {
logger.logString("Mediator: Request to open " + link);
try {
let win = getMostRecent('navigator:browser');
if (win) {
// browser
if ('delayedOpenTab' in win) {
win.delayedOpenTab(objToString(link), objToUri(ref));
return;
}
win.getBrowser().addTab(objToString(link), objToString(ref));
return;
}
win = getMostRecent('Songbird:Main');
if (win) {
// Songbird
let tb = win.document.getElementById('content');
if (tb) {
tb.loadOneTab(objToString(link), objToUri(ref), null, null, null);
return;
}
}
}
catch (ex) {
logger.log('Mediator: Failed to open tab', ex);
}
try {
window.open(objToString(link));
}
catch (ex) {
logger.log('Mediator: Failed to open window', ex);
openExternal(link);
}
}
function showNotice(window, params) {
windowwatcher.openWindow(
window,
'chrome://dta/content/about/notice.xul',
'_blank',
'chrome,centerscreen,all,dialog,modal',
params
);
}